package proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author 宋鑫宇
 * @version 1.0
 */
public class StarAgentProxy {
    /*
        设计一个方法返回一个 Star 对象的代理对象
     */
    public static Skill getProxy(Star s) {
        //为Star类，生成一个代理对象
        return (Skill) Proxy.newProxyInstance(s.getClass().getClassLoader(),
                s.getClass().getInterfaces(), new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("交钱观看..");
                        //让Star 类去执行方法
                        //method 正在调用的方法对象 args 代表这个方法的参数
                        Object invoke = method.invoke(s, args);
                        System.out.println("收场");
                        return invoke;
                    }
                });

    }
}
